package com.example.design.b.proxy2.cglib;

import net.sf.cglib.proxy.Enhancer;

/**
 * 代理类构造器
 */
public class ProxyBuilder<T> {

    /**
     * 构建代理对象
     *
     * @param obj 被代理的对象
     *
     * @return 被代理后的对象
     */
    @SuppressWarnings("unchecked")
    public T build(T obj) {
        //设置cglib生成的源码目录
//        System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "D:\\");
        // enhancer  n. 增强子(剂);增强器;放大器
        Enhancer enhancer = new Enhancer();
        // 设置父类
        enhancer.setSuperclass(obj.getClass());
        // 设置方法拦截处理器
        enhancer.setCallback(new CommonMethodInterceptor(obj));
        // 创建代理对象
        return (T) enhancer.create();
    }
}
